/*Opciones de Cabecera*/
header{ package pl.equipo13.p6; }
/* Analizador Sintactico */
class AnasintGDL extends Parser;
options{defaultErrorHandler=false;
}

{
	boolean titulo;
	boolean etiqueta;
	boolean borde;
	
	boolean origen;
	boolean destino;
	boolean estilo;
}

entrada: GRAPH DOSPUNTOS ALLAVE (nodo | arista)* CLLAVE;

nodo: { titulo = false; etiqueta = false; borde = false; } NODE DOSPUNTOS ALLAVE argumentos_n {titulo && etiqueta}? CLLAVE;
argumentos_n: ( {!titulo}? titulo | {!etiqueta}? etiqueta | {!borde}? borde)*;
titulo: TITLE DOSPUNTOS CADENA { titulo = true; };
etiqueta: LABEL DOSPUNTOS CADENA { etiqueta = true; };
borde: BORDERSTYLE DOSPUNTOS (SOLID | DASHED | DOTTED) { borde = true;};

arista: {origen = false; destino = false; estilo = false; } EDGE DOSPUNTOS ALLAVE argumentos_a {origen && destino}? CLLAVE;
argumentos_a: ({!origen}? origen | {!destino}? destino | {!estilo}? estilo)+;
origen: SOURCE DOSPUNTOS CADENA { origen = true; };
destino: TARGET DOSPUNTOS CADENA { destino = true; };
estilo: ARROWSTYLE DOSPUNTOS (SOLID | LINE | NONE) { estilo = true; };